home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1999 July: Mac OS SDK / Dev.CD Jul 99 SDK1.toast / Development Kits / Mac OS / Telephone Manager / Stiletto Sources / Sources / Preferences.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-07-05  |  7.0 KB  |  285 lines  |  [TEXT/MPS ]

  1. /************************************************************************************************/
  2. /*                                                                                                */
  3. /*    Program Name:    Stiletto                                                                    */
  4. /*                                                                                                */
  5. /*    File Name:        Preferences.c                                                                */
  6. /*                                                                                                */
  7. /*    © Apple Computer, Inc. 1991-1995                                                            */
  8. /*    All Rights Reserved                                                                            */
  9. /*                                                                                                */
  10. /*    Revision History:                                                                            */
  11. /*                                                                                                */
  12. /*        Date        Who                    Modification                                            */
  13. /*                                                                                                */
  14. /*        1991-06-30    Chris Halim            Original version                                        */
  15. /*        1995-06-26    Jaakko Railo        Version 2.0                                                */
  16. /*                                                                                                */
  17. /************************************************************************************************/
  18.  
  19. /****************************************** DESCRIPTION ******************************************
  20.  
  21. *************************************************************************************************/
  22.  
  23. /******************************************** HEADERS *******************************************/
  24.  
  25. #include "Aliases.h"
  26. #include "Resources.h"
  27. #include "Script.h"
  28. #include "TextUtils.h"
  29.  
  30. #include "Constants.h"
  31. #include "LogWindow.h"
  32. #include "Preferences.h"
  33. #include "Utilities.h"
  34.  
  35. /****************************************** DEFINITIONS *****************************************/
  36.  
  37. /****************************************** PROTOTYPES ******************************************/
  38.  
  39. void    CopyResource (short sourceFile, short targetFile, ResType theType, short resID);
  40. short    OpenPrefFile (SignedByte permission);
  41.  
  42. /******************************************** GLOBALS *******************************************/
  43.  
  44. extern    LogWindowPtr    gLogWindow;
  45.  
  46. /************************************************************************************************/
  47. /************************************************************************************************/
  48.  
  49.  
  50. #pragma segment Utilities
  51. StringHandle    GetSTRFromPref (short resID)
  52. {
  53.     short            refNum;
  54.     short            savedResRef;
  55.     StringHandle    tString = nil;
  56.     
  57.     refNum = OpenPrefFile (fsRdPerm);
  58.     if (refNum != (-1)) {
  59.         savedResRef = CurResFile ();
  60.         UseResFile (refNum);
  61.         
  62.         tString = GetString (resID);
  63.         DetachResource ((Handle) tString);
  64.     
  65.         UseResFile (savedResRef);
  66.         CloseResFile (refNum);
  67.     }
  68.     
  69.     return (tString);
  70. }
  71.  
  72.  
  73. #pragma segment Utilities
  74. void    GetWinLocFromPref (Rect * theWindowRect, short rectResID)
  75. {
  76.     short            refNum;
  77.     short            savedResRef;
  78.     
  79.     refNum = OpenPrefFile (fsRdPerm);
  80.     if (refNum != (-1)) {
  81.         savedResRef = CurResFile ();
  82.         UseResFile (refNum);
  83.         
  84.         SetRectFromResource (theWindowRect, rectResID);
  85.     
  86.         UseResFile (savedResRef);
  87.         CloseResFile (refNum);
  88.     }
  89. }
  90.  
  91.  
  92. #pragma segment Utilities
  93. void    SaveWinLocToPref (WindowPtr theWindow, short rectResID)
  94. {
  95.     short            refNum;
  96.     short            savedResRef;
  97.     Rect            **rectHandle;
  98.     
  99.     refNum = OpenPrefFile (fsRdWrPerm);
  100.     if (refNum != (-1)) {
  101.         
  102.         savedResRef = CurResFile ();
  103.         UseResFile (refNum);
  104.         
  105.         if (rectHandle = (Rect **) Get1Resource ('RECT', rectResID))
  106.         {
  107.             **rectHandle = (**((WindowPeek) theWindow)->contRgn).rgnBBox;
  108.             ChangedResource ((Handle) rectHandle);
  109.             if (ResError() != noErr)
  110.                 PutLine (gLogWindow, "### ChangedResource failed : %d", ResError());
  111.         }
  112.         
  113.         UseResFile (savedResRef);
  114.         CloseResFile (refNum);
  115.     }
  116. }
  117.  
  118.  
  119. #pragma segment Utilities
  120. void    AddToPrefFile (Handle thePref, ResType theType, short resID, ConstStr255Param resName)
  121. {
  122.     OSErr            errCode;
  123.     short            refNum;
  124.     short            savedResRef;
  125.  
  126.     refNum = OpenPrefFile (fsRdWrPerm);
  127.     if (refNum != (-1)) {
  128.         
  129.         savedResRef = CurResFile ();
  130.         UseResFile (refNum);
  131.         
  132.         if ((errCode = HandToHand (&thePref)) != noErr)
  133.             PutLine (gLogWindow, "### HandToHand failed : %d", errCode);
  134.         
  135.         if (thePref)
  136.         {
  137.             AddResource (thePref, theType, resID, resName);
  138.             
  139.             ChangedResource (thePref);
  140.             if (ResError() != noErr)
  141.                 PutLine (gLogWindow, "### ChangedResource failed : %d", ResError());
  142.         }
  143.  
  144.         UseResFile (savedResRef);
  145.         CloseResFile (refNum);
  146.     }
  147. }
  148.  
  149.  
  150. #pragma segment Utilities
  151. void    SaveToPrefFile (Handle thePref, ResType theType, short resID)
  152. {
  153.     short            refNum;
  154.     short            savedResRef;
  155.     Handle            tempHandle;
  156.     OSErr            errCode;
  157.  
  158.     refNum = OpenPrefFile (fsRdWrPerm);
  159.     if (refNum != (-1)) {
  160.         
  161.         savedResRef = CurResFile ();
  162.         UseResFile (refNum);
  163.         
  164.         if (tempHandle = Get1Resource (theType, resID))
  165.         {
  166.             RmveResource (tempHandle);
  167.             DisposHandle (tempHandle);
  168.         }
  169.         
  170.         if ((errCode = HandToHand (&thePref)) == noErr)
  171.         {
  172.             AddResource (thePref, theType, resID, "\p");
  173.  
  174.             ChangedResource (thePref);
  175.             if (ResError() != noErr)
  176.                 PutLine (gLogWindow, "### ChangedResource failed : %d", ResError());
  177.         }
  178.         else            
  179.             PutLine (gLogWindow, "### HandToHand failed : %d", errCode);
  180.  
  181.         UseResFile (savedResRef);
  182.         CloseResFile (refNum);
  183.     }
  184. }
  185.  
  186.  
  187. #pragma segment Utilities
  188. Handle    GetFromPrefFile (ResType theType, short resID)
  189. {
  190.     short            refNum;
  191.     short            savedResRef;
  192.     Handle            tempHandle;
  193.  
  194.     refNum = OpenPrefFile (fsRdPerm);
  195.     if (refNum != (-1)) {
  196.         
  197.         savedResRef = CurResFile ();
  198.         UseResFile (refNum);
  199.         
  200.         if (tempHandle = Get1Resource (theType, resID))
  201.             DetachResource (tempHandle);
  202.             
  203.         UseResFile (savedResRef);
  204.         CloseResFile (refNum);
  205.     }
  206.     
  207.     return (tempHandle);
  208. }
  209.  
  210.  
  211. #pragma segment Utilities
  212. void    CopyResource (short sourceFile, short targetFile, ResType theType, short resID)
  213. {
  214.     Handle    tHandle;
  215.     Str255    resName;
  216.     short    savedResRef = CurResFile ();
  217.     
  218.     UseResFile (sourceFile);
  219.     if (tHandle = Get1Resource (theType, resID))
  220.     {
  221.         GetResInfo (tHandle, &resID, &theType, resName);
  222.         DetachResource (tHandle);
  223.         
  224.         UseResFile (targetFile);
  225.         AddResource (tHandle, theType, resID, resName);
  226.     }
  227.     
  228.     UseResFile (savedResRef);
  229. }
  230.  
  231.  
  232. #pragma segment Utilities
  233. short    OpenPrefFile (SignedByte permission)
  234. {
  235.     OSErr            errCode;
  236.     short            vRefNum, refNum;
  237.     long            dirID;
  238.     FSSpec            thePrefFile;
  239.     short            savedResRef = CurResFile ();
  240.     Str255            fileName;
  241.     Boolean            targetIsFolder, wasAliased;
  242.  
  243.     errCode = FindFolder (kOnSystemDisk, kPreferencesFolderType, kCreateFolder, &vRefNum, &dirID);
  244.     if (errCode != noErr) {
  245.         PutLine (gLogWindow, "### FindFolder failed : %d", errCode);
  246.         return (-1);
  247.     }
  248.     
  249.     GetIndString(fileName, rCommonSTR, kPrefNameInd); 
  250.  
  251.     FSMakeFSSpec (vRefNum, dirID, fileName, &thePrefFile);
  252.     
  253.     errCode = ResolveAliasFile (&thePrefFile, true, &targetIsFolder, &wasAliased);
  254.     
  255.     refNum = FSpOpenResFile (&thePrefFile, permission);
  256.     if (refNum == (-1)) {
  257.         if (ResError () == fnfErr) {
  258.             FSpCreateResFile (&thePrefFile, '\?\?\?\?', 'pref', smSystemScript);
  259.             refNum = FSpOpenResFile (&thePrefFile, fsRdWrPerm);
  260.             
  261.             CopyResource (savedResRef, refNum, 'RECT', rLogWindRECT);
  262.             CopyResource (savedResRef, refNum, 'RECT', rTelWindRECT);
  263.             CopyResource (savedResRef, refNum, 'RECT', rModuleWindRECT);
  264.             
  265.             CopyResource (savedResRef, refNum, 'STR ', rPrefSTR);
  266.             
  267.             CopyResource (savedResRef, refNum, 'STR ', rDefaultToolSTR);
  268.             
  269.             CopyResource (savedResRef, refNum, 'vers', 1);
  270.             
  271.             UpdateResFile (refNum);
  272.             CloseResFile (refNum);
  273.             refNum = FSpOpenResFile (&thePrefFile, permission);
  274.         } 
  275.         else {
  276.             AlertUser ("\pCan't open the pref file !", ResError());
  277.             return (-1);
  278.         }
  279.     }
  280.     
  281.     return (refNum);
  282. }
  283.  
  284.  
  285.